home *** CD-ROM | disk | FTP | other *** search
- Glydo.BrowserBridge = Prototype.Class.create(Glydo.EventSource,{
- initialize: function($super) {
- $super();
- Glydo.Utils.addListener(window,"load", this.init, this, false);
- Glydo.Utils.addListener(window,"resize", this.onWindowResize,this,false);
- Glydo.Utils.addListener(window,"unload", this.unload, this, false);
- },
-
- init: function() {
- var appcontent = document.getElementById('appcontent');
- if (appcontent) {
- Glydo.Utils.addListener(gBrowser,"DOMContentLoaded", this.onBrowserDomLoad, this, false);
- Glydo.Utils.addListener(gBrowser,"load",this.onBrowserLoad, this, true);
- var container = gBrowser.tabContainer;
- if (container) {
- Glydo.Utils.addListener(container,"TabOpen", this.onTabOpen_FF_2_x, this, false);
- Glydo.Utils.addListener(container,"TabClose", this.onTabClose_FF_2_x, this, false);
- Glydo.Utils.addListener(container,"TabSelect", this.onTabSelect_FF_2_x, this, false);
- } else {
- container = gBrowser.mPanelContainer;
- if (container) {
- Glydo.Utils.addListener(container,"DOMNodeInserted", this.onTabOpen_FF_x_15, this, false);
- Glydo.Utils.addListener(container,"DOMNodeRemoved", this.onTabClose_FF_x_15, this, false);
- Glydo.Utils.addListener(container,"select", this.onTabSelect_FF_x_15, this, false);
- }
- }
- }
- Glydo.Utils.addListener(window, 'close', this.onWindowClose, this, true);
- this.fire('onWindowLoaded',window);
- },
-
- unload: function() {
- this.fire('onWindowUnloaded',window);
- },
-
- onWindowClose: function(event) {
- this.fire('onWindowClose',window);
- },
-
- onWindowResize: function(event) {
- this.fire('onWindowResize',window);
- },
-
- onBrowserDomLoad: function(event) {
- var doc = event.originalTarget;
- if (doc.nodeName == "#document") {
- var mainDoc = doc;
- while (mainDoc.defaultView.frameElement) {
- mainDoc = mainDoc.defaultView.frameElement.ownerDocument;
- }
- if (mainDoc === doc) {
- var br = this.findBrowserForDocument(mainDoc);
- this.fire('onMainDocDomLoad',br,mainDoc);
- }
- }
- },
-
- onBrowserLoad: function(event) {
- },
-
- onTabOpen_FF_2_x: function(event) {
- var browser = event.target.linkedBrowser;
- this.onTabOpen(browser);
- },
-
- onTabClose_FF_2_x: function(event) {
- var browser = event.target.linkedBrowser;
- this.onTabClose(browser);
- },
-
- onTabSelect_FF_2_x: function(event) {
- var browser = gBrowser.selectedTab.linkedBrowser;
- this.onTabSelect(browser);
- },
-
- onTabOpen_FF_x_15: function(event) {
- if (event.relatedNode != gBrowser.mPanelContainer) {
- return; //Could be anywhere in the DOM (unless bubbling is caught at the interface?)
- }
- var browser;
- if (event.target.localName == "browser") { // SeaMonkey
- browser = event.target;
- } else if (event.target.localName == "vbox") { // Firefox
- browser = event.target.childNodes[1];
- }
- if (browser) {
- this.onTabOpen(browser);
- }
- },
-
- onTabClose_FF_x_15: function(event) {
- if (event.relatedNode != gBrowser.mPanelContainer) {
- return; //Could be anywhere in the DOM (unless bubbling is caught at the interface?)
- }
- var browser;
- if (event.target.localName == "browser") { // SeaMonkey
- browser = event.target;
- } else if (event.target.localName == "vbox") { // Firefox
- browser = event.target.childNodes[1];
- }
- if (browser) {
- this.onTabClose(browser);
- }
- },
-
- onTabSelect_FF_x_15: function(event) {
- var browser = gBrowser.getBrowserAtIndex(gBrowser.mTabContainer.selectedIndex);
- this.onTabSelect(browser);
- },
-
- onTabOpen: function(browser) {
- this.fire('onTabOpen',browser);
- },
-
- onTabClose: function(browser) {
- this.fire('onTabClose',browser);
- },
-
- onTabSelect: function(browser) {
- this.fire('onTabSelect',browser);
- },
-
- findBrowserForDocument: function(doc) {
- var num = gBrowser.browsers.length;
- for (var i = 0; i < num; i++) {
- var b = gBrowser.getBrowserAtIndex(i);
- if (b && (b.contentDocument === doc)) {
- return b;
- }
- }
- }
- });
-